差不多要來做資料庫相關的開發,來設計 DB schema吧~
系列是做一個任務管理的番茄鐘,那一定要有table去記會員設定好的任務
下面這個設計常會出現在無限層的需求上,它的結構很簡單也很直覺,萬一資料有問題人工下去處理也有辦法修復。
缺點是當你的層數愈多,它的效能問題就愈明顯,但我只打算做兩層,所以是還好。
parent_id是記它的上一層是誰,資料會長這樣
EX:
id | name | parent_id |
---|---|---|
1 | A | 0 |
2 | AA | 1 |
3 | AB | 1 |
A就是AA、AB的上層
應該滿好懂的吧(?
CREATE TABLE `tasks` (
`id` int(11) UNSIGNED NOT NULL,
`parent_id` int(11) UNSIGNED NOT NULL COMMENT '父層ID',
`user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '會員ID',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '名稱',
`status` tinyint(1) UNSIGNED DEFAULT '1' COMMENT '狀態',
`created_timestamp` int(11) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `tasks`
ADD PRIMARY KEY (`id`);
ALTER TABLE `tasks`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;
任務完成會有一筆的記錄,用於統計
CREATE TABLE `records` (
`id` int(11) UNSIGNED NOT NULL,
`user_id` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '會員ID',
`task_id` int(11) UNSIGNED NOT NULL COMMENT '任務ID',
`parent_id` int(11) UNSIGNED NOT NULL COMMENT '父層ID',
`spend_time` int(11) UNSIGNED NOT NULL COMMENT '使用時間',
`date` date NOT NULL,
`created_timestamp` int(11) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `records`
ADD PRIMARY KEY (`id`);
ALTER TABLE `records`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;
通常table建完之後,我們會根據資料量跟使用的方式去建索引
但這個還早待會開發完最後再去處理
今天先這樣謝謝大家~